/*****************************************************************************
*                     Organizaci�n de Datos - 75.06                          *
*                         C�tedra Lic. Servetto                              *
*            Facultad de Ingenier�a - Universidad de Buenos Aires            *
******************************************************************************/ 

#include "Operacion.h"
#include <string>
#include <iostream>

using namespace std;

namespace Comun
{

	Operacion ParserDeOperacion::Parsear(string tipo)
	{
		if (tipo == "BorrarGrupo")
			return BorrarGrupo;
		else if (tipo == "CrearArchivoRF")
			return CrearArchivoRF;
		else if (tipo == "CrearArchivoRLV")
			return CrearArchivoRLV;
		else if (tipo == "CrearGrupo")
			return CrearGrupo;
		else if (tipo == "ExisteClase")
			return ExisteClase;
		else if (tipo == "GuardarGrupo")
			return GuardarGrupo;
		else if (tipo == "LeerGrupo")
			return LeerGrupo;
		else if (tipo == "PrimerGrupo")
			return PrimerGrupo;
		else if (tipo == "SiguienteGrupo")
			return SiguienteGrupo;
		else 
		{	
			cerr << "Comun->Operacion.cpp->ParserDeOperacion::Parsear(string tipo)" << endl << "No se puede parsear la operacion: " << tipo << endl;
			throw new exception();
		}
	};

	string ParserDeOperacion::Parsear(Operacion tipo)
	{

		switch(tipo)
		{
		case BorrarGrupo:
			return "BorrarGrupo";
		case CrearArchivoRF:
			return "CrearArchivoRF";
		case CrearArchivoRLV:
			return "CrearArchivoRLV";
		case CrearGrupo:
			return "CrearGrupo";
		case ExisteClase:
			return "ExisteClase";
		case GuardarGrupo:
			return "GuardarGrupo";
		case LeerGrupo:
			return "LeerGrupo";
		case PrimerGrupo:
			return "PrimerGrupo";
		case SiguienteGrupo:
			return "SiguienteGrupo";
		default:
			cerr << "Comun->Operacion.cpp->ParserDeOperacion::Parsear(Operacion tipo)" << endl << "No se puede representar la operacion como una cadena." << endl;
			throw new exception();
		}

	};

	OperacionConsulta ParserDeOperacionConsulta::Parsear(string tipo)
	{
		if (tipo == "ExisteClase")
			return ClasePresente;		
		else if (tipo == "InsertarInstancia")
			return InsertarInstancia;
		else if (tipo == "BorrarInstancia")
			return BorrarInstancia;
		else if (tipo == "ActualizarInstancia")
			return ActualizarInstancia;
		else if (tipo == "SeleccionarInstancia")
			return SeleccionarInstancia;
		else if (tipo == "CrearClase")
			return CrearClase;

		else 
		{	
			cerr << "Comun->Operacion.cpp->ParserDeOperacion::Parsear(string tipo)" << endl << "No se puede parsear la operacion." << endl;
			throw new exception();
		}
	};

	string ParserDeOperacionConsulta::Parsear(OperacionConsulta tipo)
	{

		switch(tipo)
		{
		case ClasePresente:
			return "ExisteClase";
		case InsertarInstancia:
			return "InsertarInstancia";
		case SeleccionarInstancia:
			return "SeleccionarInstancia";
		case ActualizarInstancia:
			return "ActualizarInstancia";
		case BorrarInstancia:
			return "BorrarInstancia";
		case CrearClase:
			return "CrearClase";			
		default:
			cerr << "Comun->Operacion.cpp->ParserDeOperacion::Parsear(Operacion tipo)" << endl << "No se puede representar la operacion como una cadena." << endl;
			throw new exception();
		}

	};

	TipoSimbolo ParserTipoSimbolo::Parsear(std::string tipo)
	{
		if (tipo == "Mayor")
			return Mayor;		
		else if (tipo == "MayorIgual")
			return MayorIgual;
		else if (tipo == "Menor")
			return Menor;
		else if (tipo == "MenorIgual")
			return MenorIgual;
		else if (tipo == "Igual")
			return Igual;
		else if (tipo == "And")
			return And;
		else if (tipo == "Or")
			return Or;
		else 
		{	
			cerr << "Comun->Operacion.cpp->ParserTipoSimbolo::Parsear(string tipo)" << endl << "No se puede parsear la operacion." << endl;
			throw new exception();
		}

	}

	string ParserTipoSimbolo::Parsear(Comun::TipoSimbolo tipo){

		switch(tipo)
		{
		case And:
			return "And";
		case Or:
			return "Or";
		case Mayor:
			return "Mayor";
		case MayorIgual:
			return "MayorIgual";
		case Menor:
			return "Menor";
		case MenorIgual:
			return "MenorIgual";			
			case Igual:
			return "Igual";			
		default:
			cerr << "Comun->Operacion.cpp->ParserTipoSimbolo::Parsear(Operacion tipo)" << endl << "No se puede representar la operacion como una cadena." << endl;
			throw new exception();
		}

	}

}
